package storage

// StorageOptions 上传选项
type StorageOptions struct {
	FileKey     string // 文件名
	StoragePath string // 存储路径
	BucketName  string // 存储桶名称（本地存储路径前缀）
}

// StorageOption 上传选项函数
type StorageOption func(*StorageOptions)

// WithFileKey 设置文件名
func WithFileKey(name string) StorageOption {
	return func(o *StorageOptions) {
		o.FileKey = name
	}
}

// WithStoragePath 设置存储路径
func WithStoragePath(path string) StorageOption {
	return func(o *StorageOptions) {
		o.StoragePath = path
	}
}

// WithBucketName 设置存储桶名称
func WithBucketName(bucket string) StorageOption {
	return func(o *StorageOptions) {
		o.BucketName = bucket
	}
}

type Validators struct {
	AllowedTypes []string // 允许的文件类型
	MaxSize      int64    // 最大文件大小(字节)
	MaxNameLen   int      // 最大文件名长度
}
type ValidatorOption func(*Validators)

// WithAllowedTypes 设置允许的文件类型
func WithAllowedTypes(types []string) ValidatorOption {
	return func(o *Validators) {
		o.AllowedTypes = types
	}
}

// WithMaxSize 设置最大文件大小
func WithMaxSize(size int64) ValidatorOption {
	return func(o *Validators) {
		o.MaxSize = size
	}
}

// WithMaxNameLen 设置最大文件名长度
func WithMaxNameLen(len int) ValidatorOption {
	return func(o *Validators) {
		o.MaxNameLen = len
	}
}
